/*
 * @lc app=leetcode.cn id=387 lang=javascript
 *
 * [387] 字符串中的第一个唯一字符
 */

// @lc code=start
/**
 * @param {string} s
 * @return {number}
 */
var firstUniqChar = function(s) {
    const map = new Map();
    let queue = [];
    for(let i = 0; i < s.length; i++) {
        const ch = s[i];
        if (!map.has(ch)) {
            map.set(ch, i);
            queue.push([ch, i]);
        } else {
            map.set(ch, -1);
            while(queue.length && map.get(queue[0][0]) === -1) {
                queue.shift();
            }
        }
    }

    return queue.length ? queue[0][1] : -1;
};
// @lc code=end